// 引入lodash库，用于处理数组和对象
import _ from 'lodash'
// 引入mockjs库，用于生成模拟数据
import Mock from 'mockjs'
// 引入成功响应格式化工具
import { success } from '@/utils/apiResult'
// 引入dayjs库，用于日期处理
import { dayjs } from 'element-plus'
// 引入axios库，用于发送HTTP请求
import axios from 'axios'
// 导出API配置对象
export const api = {
  host: import.meta.env.VITE_HOST
}

// 获取空闲车辆列表的函数
export const fetchFreeCar = params => {
  // 发送GET请求获取空闲车辆数据
  const response = axios
    .get(api.host + '/api/freeCar', {
      params: {
        per_page: params.per_page,
        page: params.page
      }
    })
    .then(res => {
      // 处理成功响应，将数据存储到localStorage
      const freeCarList = res.data.data
      if (freeCarList) {
        localStorage.setItem('freeCarList', JSON.stringify(freeCarList))
      }
      return res.data
    })
    .catch(err => {
      // 处理错误响应，打印错误信息
      if (err.response) {
        console.log(err.response.data.message)
      } else {
        console.log(err)
      }
    })
  // 返回数据（注意：这里的.data访问可能不准确，因为response已经是.then中的res了）
  return response.data
}
// 根据分页参数获取空闲车辆列表的函数
export const getFreeCarList = params => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 从localStorage获取空闲车辆列表，并根据licensePlate进行过滤
      let freeCarList = getFreeCarListFromStorage()
      if (params.licensePlate !== '') {
        freeCarList = freeCarList.filter(
          item => item.licensePlate.indexOf(params.licensePlate) >= 0
        )
      }
      // 计算总条数，根据分页参数切分数据
      const total = freeCarList.length
      const start = (params.current - 1) * params.size
      const end = start + params.size
      // 构造分页对象并返回成功响应
      const freeCarPage = {
        current: params.current,
        size: params.size,
        total: total,
        records: freeCarList.slice(start, end)
      }
      resolve(success(freeCarPage))
    }, 500)
  })
}

// 根据ID获取单个空闲车辆信息的函数
export const getFreeCar = id => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 从存储中查找对应ID的车辆，并返回成功响应
      const freeCar = _.find(
        getFreeCarListFromStorage(),
        item => item.id === id
      )
      resolve(success(freeCar))
    }, 500)
  })
}

// 添加空闲车辆的函数
export const addFreeCar = data => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 发送POST请求添加空闲车辆，并更新localStorage中的列表
      const response = axios
        .post(api.host + '/api/freeCar', data)
        .then(res => {
          // 处理成功响应，更新localStorage
          let freeCarList = getFreeCarListFromStorage()
          freeCarList.push(response.data)
          setFreeCarListToStorage(freeCarList)
        })
        .catch(err => {
          // 处理错误响应，打印错误信息
          if (err.response) {
            console.log(err.response.data.message)
          } else {
            console.log(err)
          }
        })
      // Promise resolve无需值，因为操作已经在then中完成了
      resolve()
    }, 500)
  })
}

// 批量添加空闲车辆的函数
export const batchAddFreeCar = () => {
  return new Promise(resolve => {
    // 从localStorage获取当前车辆列表，并生成新的随机车辆数据
    let freeCarList = getFreeCarListFromStorage()
    let Random = Mock.Random
    // 循环添加50个随机生成的车辆数据
    for (let i = 0; i < 50; i++) {
      freeCarList.push({
        id: i + 1,
        licensePlate: Random.pick([
          '鄂ARB989',
          '鄂A7W16R',
          '鄂AF156S',
          '鄂AQ5300',
          '鄂AQ5111'
        ]),
        constructionUnit: Random.pick([
          '工程部',
          '重庆智翔',
          '江苏中压',
          '重庆交科',
          '鑫政顺畅'
        ]),
        freeTimeStart: dayjs()
          .subtract(Random.integer(6, 20), 'w')
          .format('YYYY-MM-D'),
        freeTimeEnd: dayjs()
          .add(Random.integer(6, 20), 'w')
          .format('YYYY-MM-D'),
        freeSection: '黄石-散花',
        vehicleType: Random.pick([
          '轻型自卸货车',
          '中型载货专项作业车',
          '轻型自卸货车',
          '轻型自卸货车',
          '中型非载货专项作业车'
        ]),
        theValidityPeriodOfTheAnnualInspectionOfTheVehicle: dayjs()
          .add(Random.integer(6, 50), 'w')
          .format('YYYY-MM-D'),
        validityPeriodOfVehicleInsurance: dayjs()
          .add(Random.integer(6, 50), 'w')
          .format('YYYY-MM-D'),
        updatedDate: Random.now('day', 'yyyy-MM-dd'),
        remark: Random.cparagraph(5, 10)
      })
    }
    // 更新localStorage中的车辆列表
    setFreeCarListToStorage(freeCarList)
    // Promise resolve无需值，因为操作已经在上面完成了
    resolve()
  })
}

// 更新空闲车辆信息的函数
export const updateFreeCar = data => {
  return new Promise(resolve => {
    // 发送PUT请求更新空闲车辆数据，并更新localStorage中的对应项
    const id = data.id
    axios
      .put(api.host + '/api/freeCar/' + id, data)
      .then(res => {
        // 处理成功响应，更新localStorage
        let freeCarList = getFreeCarListFromStorage()
        const index = _.findIndex(freeCarList, item => item.id === data.id)
        if (index >= 0) {
          freeCarList[index] = res.data.data
          setFreeCarListToStorage(freeCarList)
        }
      })
      .catch(err => {
        // 处理错误响应，打印错误信息
        if (err.response) {
          console.log(err.response.data.message)
        } else {
          console.log(err)
        }
      })
    // Promise resolve无需值，因为操作已经在上面完成了
    resolve()
  })
}

// 删除空闲车辆的函数
export const removeFreeCar = id => {
  return new Promise(resolve => {
    // 发送DELETE请求删除空闲车辆数据，并从localStorage中移除对应项
    axios
      .delete(api.host + '/api/freeCar/' + id)
      .then(res => {
        // 处理成功响应，从localStorage中移除
        let freeCarList = getFreeCarListFromStorage()
        _.remove(freeCarList, item => item.id === id)
        setFreeCarListToStorage(freeCarList)
      })
      .catch(err => {
        // 处理错误响应，打印错误信息
        if (err.response) {
          console.log(err.response.data.message)
        } else {
          console.log(err)
        }
      })
    // Promise resolve无需值，因为操作已经在上面完成了
    resolve()
  })
}

// 从localStorage获取空闲车辆列表的函数
function getFreeCarListFromStorage() {
  // 从localStorage获取数据，若无则初始化为空数组
  let freeCarList = JSON.parse(localStorage.getItem('freeCarList'))
  if (!freeCarList) {
    freeCarList = []
  }
  return freeCarList
}

// 将空闲车辆列表保存到localStorage的函数
function setFreeCarListToStorage(freeCarList) {
  // 将车辆列表转换为字符串并保存到localStorage
  if (freeCarList) {
    localStorage.setItem('freeCarList', JSON.stringify(freeCarList))
  }
}